/*
 * Celda.h
 *      Author: sebastian
 */

#ifndef CELDA_H_
#define CELDA_H_
#include <iostream>
#include "../Common/Jsonizable.h"
#include <sstream>
#include "enumItems.h"

class Celda : Jsonizable {
private:
	unsigned int numero;
	bool estado;
	bool miniBarVertical;
	bool miniBarHorizontal;
	int fila;
	int columna;

protected:
	//Setea el valor de miniBarVertical en verdadero.
	void setMiniBarVertical();

	//Setea el valor de miniBarHorizontal en verdadero.
	void setMiniBarHorizontal();

public:
	Celda();

	//Construye una celda de un tipo en particular.
	Celda(unsigned int numero);

	//Le asigna a la celda una posicion.
	void setearPosicion(int fila, int columna);

	//Se dibuja a la celda. (esto quizas les convenga cambiarlo a Ivan)
	void dibujarse();

	//Devuelve el tipo de celda.
	unsigned int getTipo();

	//Cambia el estado de una celda.
	void cambiarEstado();

	//Devuelve el estado de una celda.
	bool getEstado();

	//True si la Celda es del tipo estrella.
	bool esEstrella();

	//True si la Celda es del tipo MiniBarHorizontal.
	bool esMiniBarHorizontal();

	//True si la Celda es del tipo MiniBarVertical.
	bool esMiniBarVertical();

	//True si la Celda es del tipo Agujero.
	bool esAgujero();

	//True si la Celda es del tipo Minibar.
	bool esMinibar();

	//Devuelve la posicion de la fila.
	int getFila();

	//Devuelve la posicion de la columna
	int getColumna();

	//Devuelve un Json de la celda.
	Json::Value getJson();

	//Se setea en base a un Jason pasado.
	void setJson(Json::Value&);

	virtual ~Celda();
};

#endif /* CELDA_H_ */
